package com.mrx.example.model;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import lombok.Getter;
import lombok.ToString;
import org.apache.commons.io.IOUtils;

import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.nio.charset.StandardCharsets;

/**
 * Post 请求体对象
 *
 * @author Mr.X
 */
@Getter
@ToString(exclude = {"json"})
public class PostBody extends BaseModel {

    private final String data;

    private final JSONObject json;

    public PostBody(HttpServletRequest request) throws IOException {
        this.data = IOUtils.toString(request.getInputStream(), StandardCharsets.UTF_8);
        this.json = JSON.parseObject(data);
    }

    /**
     * postBody 是否不包含指定字符串
     *
     * @param str 要判断的字符串
     * @return 不含参数所给的字符串就返回 true
     */
    public boolean dataNotContains(String str) {
        return !data.contains(str);
    }

    /**
     * 将 postBody 转换成 JSON 对象
     *
     * @return 转换后的 JSON 对象
     */
    public JSONObject getJSONObject(String key) {
        return json.getJSONObject(key);
    }

    /**
     * 从 postBody 的 JSON 对象中获取指定 key 的 Java 对象
     *
     * @param key   要获取的 JSON 对象的 key
     * @param clazz 要获取的 Java 对象类型
     * @param <T>   要获取的 Java 对象类型
     * @return 获取到的 Java 对象
     */
    public <T> T getJavaObjectFromJSON(String key, Class<T> clazz) {
        return getJSONObject(key).toJavaObject(clazz);
    }
}
